package demo06

import scala.+:
import scala.io.Codec

/**
 * @author xiaoZhao
 * @date 2022/7/2
 * @describe 不可变的数组
 *           Scala中的集合都是引用类型，并不关心指向的对象中的内容，只关心当前指向的对象
 *           不可变相当于是对象的引用地址不可变，占据的内存空间不可变，可以改变某个位置上的值
 */
object Test01_ImmutableArray {
  def main(args: Array[String]): Unit = {

    // 创建数组
    val array = new Array[Int](10)
    // 另一种方式
    val array2 = Array(10, 21, 65, 33, 78)

    // 访问数组中的元素
    println(array(0))
    println(array(1))
    println(array(2))
    println(array(3))

    //  修改值
    array(0) = 12
    array(2) = 23

    println(array(0))
    println(array(1))
    println(array(2))
    println("===============================")

    // 数组遍历
    // 1.普通for循环
    for (i <- 0 until array.length) {
      println(array(i))
    }

    for (i <- array.indices) println(array(i))

    // 2.增强for循环
    for (elem <- array2) println(elem)

    // 3.迭代器
    val iterator = array2.iterator
    while (iterator.hasNext) println(iterator.next())

    // 4.调用foreach方法
    array2.foreach((elem: Int) => println(elem))
    array.foreach(println)

    // 5.转换为String
    println(array2.mkString("--"))

    println("=============================")

    // 添加元素
    // 加到数组后面
    val newArray = array2.:+(90)
    println(array2.mkString("--"))
    println(newArray.mkString("--"))

    // 加到数组前面
    val newArray2 = newArray.+:(30)
    println(newArray2.mkString("--"))

    val newArray3 = newArray2 :+ 18
    val newArray4 = 19+:  28 +: newArray3 :+ 87 :+ 98
    println(newArray4.mkString("--"))

    val chars =  Array.apply('a', 'b', 'c','d')

    val value = Codec.toUTF8(chars,0,3)
    println(('z' +: chars :+ 'r').mkString("--"))
  }
}
